package cn.edu.xjtu.carlWay.tree.minAbsoluteDifferenceInBST;

import cn.edu.xjtu.Util.TreeNode.TreeNode;

/**
 * 530. 二叉搜索树的最小绝对差
 * 给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值 。
 * <p>
 * 差值是一个正数，其数值等于两值之差的绝对值。
 * <p>
 * https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/
 */
public class Solution {
    int result = Integer.MAX_VALUE;
    TreeNode pre = null;

    /**
     * 想象成中序遍历的话就是一个有序数组了
     *
     * @param root
     * @return
     */
    public int getMinimumDifference(TreeNode root) {
        if (root == null) return 0;
        traversal(root);
        return result;
    }

    private void traversal(TreeNode root) {
        if (root == null) {
            return;
        }
        // 遍历左子树
        traversal(root.left);

        // 在中间进行数据处理
        if (pre != null) {
            result = Math.min(result, root.val - pre.val);
        }
        pre = root;

        // 遍历右子树
        traversal(root.right);
    }
}
